package com.cc.visitor.utils;

import com.cc.visitor.enums.RoleType;
import com.cc.visitor.enums.UserType;

import java.util.Map;
import java.util.Optional;

/**
 * 解析微信发送来的消息 map 中的数据
 * @author chanchaw
 * @create 2024-12-03 10:53
 */
public class WechatMapUtils {
    /**
     * 获取消息中的 openId
     * @param map 微信服务器发送给开发者后台的消息 map 对象
     * @return 微信用户 openId
     */
    public static String getOpenId(Map<String, String> map){
        return Optional.ofNullable(map.get("FromUserName")).orElse("");
    }

    /**
     * 返回二维码中场景值完整字符串
     * 消息对象 map 中的 EventKey:qrscene_1,0,10
     * 返回实际的场景值：1,0,10
     * @param map 微信服务器发送给开发者后台的消息 map 对象
     * @return
     */
    public static String getSceneString(Map<String, String> map){
        if(map == null) return "";
        String s = Optional.ofNullable(map.get("EventKey")).orElse("");
        if(s.length() == 0) return "";
        String substring = s.substring(0, 8);
        if(!substring.equalsIgnoreCase("qrscene_")) return "";
        return s.substring(8);
    }

    /**
     * 获取关注用二维码场景值中的用户类型
     * @param map
     * @return
     */
    public static Integer getSceneUserType(Map<String, String> map){
        String sceneAll = Optional.ofNullable(getSceneString(map)).orElse("");
        if(sceneAll.length() == 0) return RoleType.VISITOR_NORMAL.getId();// 没有场景值则默认是普通访客
        String[] split = sceneAll.split(",");
        if(split.length == 0) return RoleType.VISITOR_NORMAL.getId();// 没有场景值则默认是普通访客
        String roleTypeString = Optional.ofNullable(split[split.length - 1]).orElse(RoleType.VISITOR_NORMAL.getSid());// 没有场景值则默认是普通访客
        return Integer.parseInt(roleTypeString);
    }
}
